const fs = require('fs');
const path = require('path');
const configPath = path.join(__dirname, 'config.json');

function getGitConfig(callback) {
  fs.readFile(configPath, 'utf8', (err, data) => {
    if (err) return callback(err);
    try {
      const config = JSON.parse(data);
      callback(null, config);
    } catch (e) {
      callback(e);
    }
  });
}

function addGitRepo(newRepo, callback) {
  fs.readFile(configPath, 'utf8', (err, data) => {
    if (err) return callback(err);
    let config;
    try {
      config = JSON.parse(data);
    } catch (e) {
      return callback(e);
    }
    config.gitRepos = config.gitRepos || [];
    config.gitRepos.push(newRepo);
    fs.writeFile(configPath, JSON.stringify(config, null, 2), callback);
  });
}

function updateGitRepo(idx, updateRepo, callback) {
  fs.readFile(configPath, 'utf8', (err, data) => {
    if (err) return callback(err);
    let config;
    try {
      config = JSON.parse(data);
    } catch (e) {
      return callback(e);
    }
    if (!Array.isArray(config.gitRepos) || idx < 0 || idx >= config.gitRepos.length) {
      return callback(new Error('索引无效'));
    }
    config.gitRepos[idx] = updateRepo;
    fs.writeFile(configPath, JSON.stringify(config, null, 2), callback);
  });
}

function deleteGitRepo(idx, callback) {
  fs.readFile(configPath, 'utf8', (err, data) => {
    if (err) return callback(err);
    let config;
    try {
      config = JSON.parse(data);
    } catch (e) {
      return callback(e);
    }
    if (!Array.isArray(config.gitRepos) || idx < 0 || idx >= config.gitRepos.length) {
      return callback(new Error('索引无效'));
    }
    config.gitRepos.splice(idx, 1);
    fs.writeFile(configPath, JSON.stringify(config, null, 2), callback);
  });
}

module.exports = {
  getGitConfig,
  addGitRepo,
  updateGitRepo,
  deleteGitRepo
};